
import java.awt.Color;
import java.awt.Component;
import java.awt.Font;

import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;

import javax.swing.border.LineBorder;
import javax.swing.border.TitledBorder;
/**
 * La classe Player estende la classe JPanel ereditandone tutte le proprietà.
 * E' un pannello che identifica le proprietà di ogni singolo giocatore: il nome,
 * il punteggio partita, il punteggio manche e la presenza o meno del jolly.
 * All'interno della classe Player, sono contenuti dei metodi che permettono di
 * settare i vari parametri del giocatore e dei metodi che permettono di mostrare
 * graficamente attraverso il pannello i cambiamenti attuati.
 * @author Maciej Grinka
 */

public class Player extends JPanel {

   /**
    * Stringa che identifica il nome del giocatore
    */
    private String name;
    /**
     * Intero che identifica il punteggio partita
     */
    private int game_point;
    /**
     * Intero che indentifica il punteggio manche
     */
    private int manche_point;
    /**
     * Costante di tipo JLabel che identifica il campo Nome del giocatore
     */
    private final JLabel JNAME = new JLabel("Nome:");
    /**
     * Costante di tipo JLabel che identifica il campo Punteggio del giocatore
     */
    private final JLabel JGAME = new JLabel("Punteggio:");
    /**
     * Costante di tipo JLabel che identifica il campo Manche del giocatore
     */
    private final JLabel JMANCHE = new JLabel("Manche:");
    /**
     * Oggetto di tipo JLabel che mostra graficamente il valore effettivo del punteggio di gioco
     */
    private JLabel JGamePoint;
    /**
     * Oggetto di tipo JLabel che mostra graficamente il valore effettivo del punteggio di manche
     */
    private JLabel JManchePoint;
    /**
     * Oggetto di tipo JLabel che mostra graficamente il valore effettivo del jolly
     */
    private JLabel JJolly = new JLabel();
    /**
     * Oggetto di tipo JLabel che mostra graficamente il valore effettivo del nome del giocatore
     */
    private JLabel playerName;
    /**
     * Oggetto di tipo BoxLayout che imposta il layout effettivo del pannello
     */
    private BoxLayout layout;
    /**
     * Booleano che identifica lo stato del jolly
     */
    private boolean jolly;
    /**
     * Booleano che identifica lo stato del giocatore
     */
    private boolean selected;
/**
 * Inizializza un nuovo oggetto Player prendendo come argomento il nome del giocatore.
 * @param name nome del giocatore
 */
    public Player(String name) {
        this.name = name;
        
        Init();
    }
/**
 *  Inizializza i parametri fondamentali dell'oggetto Player
 */
    private void Init() {

        game_point=0;
   
        
        JJolly.setIcon(new ImageIcon(Player.class.getResource("image/jolly.gif")));
        setLayout();

    }
/**
 * Ritorna un oggetto di tipo JPanel che identifica il pannello contenente i 
 * punteggi di manche e di partita del giocatore
 * @return un JPanel con i parametri di gioco del giocatore
 */
    private JPanel PointPanel() {
        JGamePoint = new JLabel("0");
        JManchePoint = new JLabel("0");
        JPanel jp = new JPanel();
        jp.setOpaque(false);
        JPanel jp1 = new JPanel();
        jp1.setOpaque(false);
        JPanel jp2 = new JPanel();
        jp2.setOpaque(false);
        jp1.add(JMANCHE);
        jp1.add(JManchePoint);
        jp2.add(JGAME);
        jp2.add(JGamePoint);
        jp.setLayout(new BoxLayout(jp, BoxLayout.Y_AXIS));
         jp.setBorder(BorderFactory.createTitledBorder(BorderFactory.createLineBorder(new Color(255, 0, 0)), "Punteggio", TitledBorder.DEFAULT_JUSTIFICATION, TitledBorder.DEFAULT_POSITION, new Font("Arial", 1, 12), new Color(255, 0, 0))); // NOI18N
 
        jp.add(jp1);
        jp.add(jp2);
        return jp;
    }
/**
 * Ritorna un oggetto di tipo JPanel che identifica il pannello contenente il nome del giocatore
 * @return un JPanel con il nome del giocatore
 */
    private JPanel NamePanel() {

        JPanel jp = new JPanel();
        jp.setOpaque(false);
        playerName = new JLabel();
        playerName.setText(name);
        jp.add(JNAME);
        jp.add(playerName);
        return jp;
    }
/**
 *  Setta le impostazioni di Layout del pannello Player tra i quali il colore di 
 * background e i bordi.
 */
    private void setLayout() {
        layout = new BoxLayout(this, BoxLayout.Y_AXIS);
        this.setLayout(layout);
         this.setBorder(new LineBorder(new Color(0, 0, 0), 2, true));
        this.setBackground(new Color(147, 206, 213));
        this.add(NamePanel());
        
        JJolly.setAlignmentX(Component.CENTER_ALIGNMENT);
        JJolly.setEnabled(false);
        this.add(JJolly);
        this.add(PointPanel());
    }
/**
 * Setta il punteggio della partita attraverso un parametro di input di tipo intero
 * @param gp valore numerico che identifica il punteggio della partita
 */
    public void setGamePoint(int gp) {
        this.game_point = gp;
        this.JGamePoint.setText("" + game_point);
    }
    /**
     * Ritorna un intero che identifica il valore del punteggio partita
     * @return un intero che identifica il punteggio della partita
     */
     public int getGamePoint() {
        return game_point;
       
    }
     /**
      *  Setta il punteggio di manche attraverso un parametro di input di tipo intero
      * @param mp valore numerico che identifica il punteggio di manche
      */
     public void setManchePoint(int mp) {
        this.manche_point = mp;
        this.JManchePoint.setText("" + manche_point);
    }
     /**
      * Ritorna un intero che identifica il valore del punteggio di manche
      * @return un intero che identifica il punteggio di manche
      */
     public int getManchePoint() {
        return manche_point;
    }
     /**
      * Setta il jolly come attivo o non attivo
      * @param b booleano che identifica lo stato del jolly 
      */
     public void setJollyBoolean(boolean b){
         this.jolly = b;
         JJolly.setEnabled(jolly);
     }
     /**
      * Ritorna il valore booleano che mostra lo stato del jolly
      * @return un booleano contenente lo stato del jolly
      */
     public boolean getJollyBoolean(){
         return jolly;
     }
     /**
      * Setta il giocatore come attivo o non attivo, impostando il colore di background
      * del pannello del giocatore per differenziare lo stato di attività dallo stato
      * di non attività
      * @param selected un booleano contenento lo stato del giocatore
      */
     public void setSelected(boolean selected){
         this.selected=selected;
         if(selected)
         this.setBackground(new Color(62, 94, 249));
         else
         this.setBackground(new Color(147, 206, 213));
     }
     /**
      * Ritorna true se il giocatore è selezionato
      * @return un valore booleano che identifica se il giocatore è selezionato
      */
     public boolean isSelected(){
         return selected;
     
   
     }
     /**
      * Ritorna una stringa contenente il nome del giocatore
      * @return una stringa contenente il nome del giocatore
      */
       public String getPlayerName(){
         return name;
       }
}
